import * as actionTypes from './constants'
// reduer 分支 goods : 购物车
let data = {
    list:[]
}

export default function(state = data,action) {
    switch(action.type) {
        case actionTypes.SET_ALL_GOODS:
            let list = action.data;
            list.map(item => {
                item.check = true
            })
            return Object.assign({},state,{list:action.data})
        // reducer 重新计算 财务的角度
        // 选择或反选
        case actionTypes.CHECK_GOODS:
            let checkList = state.list;
            checkList.map(item => {
                if(item.goodsId == action.data){
                    item.check = !item.check
                    item.goodsNum == "0" ? item.goodsNum == '1':''
                }
            })
            // 新状态
            return Object.assign({},state,{
                list:[...checkList]
            })
            break;
        // 商品数量 + -
        case actionTypes.CHANGE_GOODS_NUM:
            let changeList = state.list;
            changeList.map(item => {
                if(item.goodsId == action.data.goodsId) {
                    action.data.status == 'add' ? item.goodsNum++:item.goodsNum--;
                    item.goodsNum == '0' ? item.check = false :''
                }
            })
            return Object.assign({},state,{list:[...changeList]})
            break;
        case actionTypes.CHECK_ALL_GOODS:
            // 全选和取消全选
            // state 旧状态
            let checkAllList = state.list
            // 新状态 完整正确
            checkAllList.map(item => {
                item.check = !action.data
            })
            return Object.assign({},state,{list:[...checkAllList]})
            break;
        default:
            // let list = state.list
            // list.map(item => {
            //     item.check = true
            // })
            // 返回一个全新的对象，拥有 state  list
            // 为了搞定引用式赋值
            // 使用了Object.assign , 未来使用 immutables  
            // 将新的状态与原来的状态在物理层面上 绝对区分开  
            // redux 有洁癖 有了新状态 旧状态就丢了  
            // 每一刻状态都留下了 可以被追溯 
            // {
            //     ...state,
            //     list
            // }   ==
            // return Object.assign({},state,{list:[...list]});
            return state
    }
}